package com.kele.domain;


import lombok.Data;

import java.util.Arrays;
import java.util.List;

/**
 * 创作人 王箫凯
 * Date 2021/6/10
 * Time 8:27
 * 分页查询的中间插件
 * @author 王箫凯
 */
@Data
public class pageInfo {

    //设置每页的数量


    int dataNums =5;

    //总数据量

    private int total;

    //获取当前数据量

    private int size;

    //获取 总页数

    private int pageNums;

    //获取当前页数

    private int pageNum =1;

    //获取导航栏

    private int[] pageBar;

    //获取前一页

    private int proPageNum;

    //获取下一页

    private int nextPageNum;

    //判断是否存在上一页;

    private boolean isHaveProPageNum=false;

    //判断是否存在下一页

    private boolean isHaveNextPageNum=false;

    //获取数据 数组

    private List list;


    @Override
    public String toString() {
        return "pageInfo{" +
                "dataNums=" + dataNums +
                ", total=" + total +
                ", size=" + size +
                ", pageNums=" + pageNums +
                ", pageNum=" + pageNum +
                ", pageBar=" + Arrays.toString(pageBar) +
                ", proPageNum=" + proPageNum +
                ", nextPageNum=" + nextPageNum +
                ", isHaveProPageNum=" + isHaveProPageNum +
                ", isHaveNextPageNum=" + isHaveNextPageNum +
                ", list=" + list +
                '}';
    }

    /**
     * 空参构造
     * @param list 获取当前的数据
     * @param pageNum 当前页数
     * @param total 总数居量
     * @param dataNums 每页数据量
     * @param pageBarSize 地址栏的数量
     */
    public pageInfo(List list, int pageNum, int total, int dataNums, int pageBarSize){



        //获取数据
        this.list=list;

        //获取一页有多少个数据
        if (dataNums!=0){
            this.dataNums=dataNums;
        }
        //总数据量
        this.total=total;
        //获取总页数
        if (total%dataNums==0){
            this.pageNums=total/dataNums;
        }else {
            this.pageNums=total/dataNums +1;
        }
        // 对非法的页数进行控制
        if (pageNum>=this.pageNums){
            this.pageNum=this.pageNums;
        } else if (pageNum>=1){
            this.pageNum=pageNum;
        }
        //判断是否存在上一页 并找到上一页
        if (this.pageNum==1){
            this.proPageNum=this.pageNum;
        }else if (this.pageNum>1){
            this.proPageNum=this.pageNum-1;
            this.isHaveProPageNum=true;
        }
        //判断是否存在下一页 并找到下一页
        if (this.pageNum==this.pageNums){
            //如果当前页数与最后一页相等，则表示当前页数就是最后一页
            this.nextPageNum=this.pageNum;
        }else if (this.pageNum<this.pageNums){
            this.isHaveNextPageNum=true;
            this.nextPageNum=this.pageNum+1;
        }
        //得到当前的页数数据总量
        if (this.pageNum>=1 && pageNum<this.pageNums){
            this.size=dataNums;
        }else {
            this.size=total%dataNums;
        }
        //获取地址栏
        this.pageBar=pageBars(this.pageNum,this.pageNums,pageBarSize);




    }

    //得到分页拦

    /**
     * 获取地址栏
     * @param pageNum 当前页数
     * @param pageNums 总页数
     * @param pageBarSize 地址拦的数量
     * @return 返回一个数组
     */
    public int[] pageBars(int pageNum,int pageNums,int pageBarSize){

        //当前总页数小于 地址数
        if (pageBarSize>= pageNums){
            int[] bar=new int[pageNums];
            for (int i = 0; i < pageNums; i++) {
                bar[i]=i+1;
            }
            return bar;
        }else {
            int[] bar=new int[pageBarSize];
            int startBar=pageNum-pageBarSize/2;
            int endBar=pageNum+pageBarSize/2;
            System.out.println(startBar);
            System.out.println(endBar);
            //前面不够 后面够
            if(startBar<1){
                System.out.println(1);
                startBar=1;
                for (int i =0; i <pageBarSize; i++) {
                    bar[i] =startBar+i;
                }
                //前面够，后面不够
            }else if (endBar>pageNums){
                System.out.println(2);
                endBar= pageNums;
                for (int i =1; i<=pageBarSize; i++) {
                    bar[i-1]=endBar+i-pageBarSize;
                }
                //前后都满足
            }else {
                for (int i = 0; i < pageBarSize; i++) {
                    bar[i]=startBar+i;
                }
            }
            return bar;
        }

    }

}
